import {
  ActivityStatusEnum, ActivityTypeEnum, ActivityVersionEnum, ApprovalStatusEnum, CancelApprovalStatusEnum, EnrollVerifyEnum, IsAuditAuthEnum,
  IsRegister, PublishStatusEnum, RankTypeEnum, RefundApplyStatus, RefundTicketTypeEnum, ReviewStatusEnum, ShowModeEnum, SignStatusEnum,
  SignTypeEnum, TicketBuyLimitEnum, TicketBuyTimeTypeEnum, TicketStatusEnum, TicketStockLimitEnum, TicketTypeEnum
} from '@/enums/activityStatusEnum';
import { MemberRoleEnum } from './../../enums/memberRoleEnum';
import type { IQuery } from './../indexTypes';
import type { FormItemResult, FormItemVoMapItem } from '../membership/formCompTypes';
import type { customFormUserAnswerList } from '../membership/types';
import type { ActivityRegisterTicketUnion, ActivityShortDetailVo } from '../order/types';
import type { SexEnum } from '@/enums/loginEnum';

/** 活动提醒 1：未发送 2：已发送 */
export type msgStatus = 1 | 2;
/** 未报名人员是否可以签到 0:否 1是  是 进入报名，否。则不允许（暂无报名权限） */
export type enrollSign = 0 | 1;
/** 是否开启手动签名 0:否 1是  否不用签名 */
export type manualSign = 0 | 1;
/** ①该单位报名名额已满，②该单位人员暂无报名权限，③可报名状态 */
export type enrollState = 1 | 2 | 3;
/** 是否对非会员开放 0:否;1是 */
export type memberOpen = 0 | 1;
/** 报名场景 mini 活动详情 mini_sign 活动签到 agent 代报名 batch 后台报名 */
export type registerType = 'mini' | 'mini_sign' | 'agent' | 'batch';
/** 是否限制报名人数 0 否 1 是 */
export type EnrollRestrict = 0 | 1

export const RegisterTypeText: { [x in registerType]: string } = {
  mini_sign: '小程序-签到报名',
  mini: '小程序自主报名',
  batch: '后台代报名',
  agent: '小程序代报名'
}

export const getApprovalStatusText = new Map([
  [ApprovalStatusEnum.UNDERREVIEW, { text: '待审核', color: '#2878FF' }],
  [ApprovalStatusEnum.REJECT, { text: '已驳回', color: '#EA5E0E' }],
  [ApprovalStatusEnum.PASSED, { text: '已通过', color: '#2878FF' }],
  [ApprovalStatusEnum.NOTPASS, { text: '已拒绝', color: '#EA5E0E' }],
  [ApprovalStatusEnum.CANCEL, { text: '已取消', color: '#EA5E0E' }],
  [ApprovalStatusEnum.CANCELING, { text: '退款中', color: '#EA5E0E' }],
]);

export const getCancelApprovalStatusText = new Map([
  [CancelApprovalStatusEnum.UNDERREVIEW, { text: '申请取消中', color: '#EA5E0E' }],
  [CancelApprovalStatusEnum.REJECT, { text: '申请被驳回', color: '#EA5E0E' }],
  [CancelApprovalStatusEnum.PASSED, { text: '取消成功', color: '#2878FF' }],
])


export interface IActivityListData extends IQuery {
  activityStatuss: Array<ActivityStatusEnum>;
  myActivity?: number;
  /**活动报名状态 */
  approvalStatus?: ApprovalStatusEnum,
  /**活动发布状态 */
  publishStatus?: PublishStatusEnum | undefined;
  // 查询参数
  title?: string;
  // 根据活动ID 查询报名记录
  activityId?: number
}

/** 专员信息 */
export interface attacheVoItem {
  attacheType: string;
  id: number;
  phonenumber: string;
  sysUserId: number;
  userName: string;
}

export interface IActivityListResData {
  activityType: ActivityTypeEnum;
  activityStatus: ActivityStatusEnum;
  register: {
    approvalStatus: ApprovalStatusEnum;
    id: number;
    companyName: string;
    personName: string;
    userId: number;
    signStatus: SignStatusEnum
  } | null;
  /** 报名ID */
  registerId?: number
  /** 是否允许分享 0 否 1 是 */
  restrictShar: 0 | 1;
  /** 是否限制报名人数 0 否 1 是 */
  enrollRestrict: EnrollRestrict
  /** 是否显示报名人列表 0 否 1 是 */
  displayRegister?: 0 | 1,
  /**公开人脉广场 */
  openConnectionCircleStatus: 0 | 1;
  /**是否隐藏 */
  display: 0 | 1,
  /** 分享图 */
  sharUrl: string
  memberOpen: memberOpen;
  attacheVoList: attacheVoItem[];
  msgStatus: msgStatus;
  address: string;
  addressName: string;
  coverUrl: string;
  deleted: boolean;
  endTime: string;
  enrollEndTime: string;
  enrollStartTime: string;
  id: number;
  okNum: number;
  maxNum: number;
  startTime: string;
  title: string;
  tripartiteId: string;
  userImgs: string[];
  passedNum: number;
  /** 是否开启报名人数显示1是，0否 */
  openRegNum: number;
  synopsis: string;
  telepHone: string | null;
  longitude: string;
  latitude: string;
  /**参会证地址 */
  attendanceCardUrl: string;

  /**活动发布状态 */
  publishStatus: PublishStatusEnum;

  /**待审核人数 */
  waitingReviewNum: number;
  /** 最小价格 */
  startPrice: number
  /** 原价 */
  originalPrice: number
  /** 优惠标签名 */
  tagName: string
  /** 待支付订单号 */
  orderCode?: string
  activityTag: ActivityVersionEnum
  /** 是否显示 "起" */
  startFlag?: boolean
  /** 是否公开邀约排行榜(0否 1 是) */
  openInviteStatus: number;
  /** 邀约成功人数 */
  inviteRegisterNum: number;
  /** 该活动是否有付费票 0 无 1 有 */
  payTicket: 0 | 1
  /** 当活动只有一张票时, 返回这张票的数据 */
  onlyOneTicketVo: IActivityTicketResult
}

export interface IPrticipantsListData extends IQuery {
  activityId: number;
}

export interface IPrticipantsListResData {
  activityId: number;
  approvalStatus: ApprovalStatusEnum;
  avatar: string;
  companyName: string;
  companyPosition: string;
  createBy: number;
  createTime: string;
  deleted: boolean;
  id: number;
  personName: string;
  personTel: string;
  personWx: string;
  tenantId: number;
  updateBy: number;
  updateTime: string;
  userId: number;
  wxOpenId: string;
  memberLevel: number;
  memberLeadingId: number;
  isAssociation: number;
  isAlumnus: number;
  memberLevelName: string
}

/**
 * 根据报名id获取卡片信息
 */
export interface RegisterIdAppUserInfo {
  /**用户id */
  appUserInfoId: number;
  id: number;
  /** 姓名 */
  name: string;
  /** 性别 */
  sex: SexEnum;
  /** 单位 */
  companyName: string;
  /** 单位职位 */
  companyPositionName: string;
  /** 会员等级名称 */
  memberLevelName: string;
  /** 是否需要申请入会 */
  applyMember: boolean;
  /** 头像 */
  avatar: string;
  /** 学校 */
  schoolName: string;
  /** 学校编码 */
  schoolCode: string;
  /** 籍贯 */
  nativePlace: string;
  /** 籍贯 */
  nativePlaceStr: string;
  /** 需求资源 */
  demand: string;
  /** 提供资源 */
  resource: string;/*  */
  /** 邮箱 */
  email: string;
  /** 微信 */
  wechatId: string;
  /** 是否已报名 */
  isRegister?: number;
  /**是否本人 */
  self?: boolean;
  /** 完成度值 */
  dataValue: number,
  /**完成度比例 */
  dataValueRate: number,
  /**是否超过80 */
  complete: boolean,
}

export interface IEnterForActivityData {
  // personName: string
  // companyName: string
  // companyPosition: string
  activityId: number;
  registerType: registerType;
  customFormItem?: {
    answerList: { formItemId: number, content: string[] }[]
  }
  retinueId?: number
  personTel?: string
}

export interface IIdentityItem {
  memberId: number;
  memberName: string;
  positionName: string;
  positionLevel: number;
  memberRoleType: MemberRoleEnum;
  enrollState: enrollState;
}

export interface IRegistrationStatusRes {
  activityId: number;
  approvalStatus: ApprovalStatusEnum;
  activityStatus: ActivityStatusEnum;
  enrollSign: enrollSign;
  manualSign: manualSign;
  memberOpen: memberOpen;
  enrollVerify: EnrollVerifyEnum;
  list: IIdentityItem[];
  /** 是否已签到 */
  signIn: boolean;
  /** 后台是否打开自主签到方式 */
  isOtherSign?: boolean
  activityVo: IActivityListResData
}

export interface AttendanceCardResult {
  activityId: number
  activityName: string
  attendanceCardUrl: string
  activityRegisterId: number
  isActivityArrange: boolean
}

export interface ISignRegisterData {
  activityId: number;
  activityStatus?: ActivityStatusEnum;
  sysUserId?: number;
  // 当前页
  current?: number;
  // 每页条数
  size?: number;
}

export interface ISignRegisterRes {
  id: number;
  activityId: number;
  activityName: string;
  avatar: string;
  memberId: number;
  memberLevel: number;
  companyName: string;
  companyPosition: string;
  positionLevel: number;
  personName: string;
  seatNum: string;
  signStatus: number;
  signTime: string;
  cardNum: number;
  approvalStatus: ApprovalStatusEnum;
  activityStatus: ActivityStatusEnum;
  sysUserId: number;
}

export interface IAppMemberCountRes {
  activityId: number;
  counNum: number;
  reviewed: number;
  passed: number;
}

export interface IAppRegistrationData extends IQuery {
  activityId: number;
}

export interface IAppRegistrationRes {
  approvalStatus: ApprovalStatusEnum;
  avatar: string;
  companyPosition: string;
  companyName: string
  id: number;
  isRegister: boolean;
  levelId: number;
  memberId: number;
  memberName: string;
  phonenumber: string;
  positionLevel: number;
  userId: number;
  userName: string;
  wxOpenId: string;
}

export interface RetinueAddData {
  companyName: string
  companyPositionName: string
  avatar: string
  name: string
  phone: string
}

export interface RetinueListResult extends RetinueAddData {
  id: number
  approvalStatus: ApprovalStatusEnum
}

export interface ActivityFormGetByIdResult {
  formItemList: FormItemResult[]
  customFormItemMap: FormItemVoMapItem;
  customFormUserAnswerList: customFormUserAnswerList[]
}

export interface FindActivityArrangeListResult {
  address: string
  displayName: string
  endTime: string
  name: string
  startTime: string
}
/**
 * 活动详情富文本列表
 */
export interface ActivityDetailList {
  id: number;
  /**模块内容 */
  introduce: string;
  /**模块名称 */
  moduleName: string;

}

/**
 * 活动举办单位
 */
export interface IOrganizingUnit {
  id: number;
  /**单位名称 */
  orgName: string;
  /**
   * 单位类型
   */
  activityType: ActivityTypeEnum;
  /**标签 */
  tagName: string;
  /**
   * 单位logo
   */
  logo: string;
}

/**活动统计 */
export interface IActivityCountInfo {
  activityType: ActivityTypeEnum
  /**浏览数 */
  browseNumByCurrentTenant: number;
  /**今日新增浏览次数 */
  todayBrowseNumByCurrentTenant: number;
  /**浏览人数 */
  browsePeopleNumByCurrentTenant: number;
  /**今日新增浏览人数 */
  todayBrowsePeopleNumByCurrentTenant: number;

  /**是否开启大屏 */
  biconfigStatus: number;


  /**签到人数 */
  registerSignNumByCurrentTenant: number;

  /**待审核人数 */
  waitingReviewNumByCurrentTenant: number;
  /**今日待审核人数 */
  todayWaitingReviewNumByCurrentTenant: number;
  /**报名成功人数 */
  passedNumByCurrentTenant: number;
  /**今日成功报名人数 */
  todayPassedNumByCurrentTenant: number;
  /**取消报名人数 */
  cancelRegisterPassedNumByCurrentTenant: number;
  /**报名人数 */
  registerNumByCurrentTenant: number;
  /**今日报名人数 */
  todayRegisterNumByCurrentTenant: number;
  /** 申请审核人数*/
  applyReviewNum: number;
}

export interface IActivityRegisterQuery {
  // 当前页
  current?: number;
  // 每页条数
  size?: number;
  /**活动id */
  activityId: number;
  /**关键字 */
  keyWord?: string;
  /**会员等级id */
  identity?: number | undefined;
  /**报名状态 */
  approvalStatusList?: ApprovalStatusEnum[] | undefined,
  approvalStatus?: ApprovalStatusEnum | undefined,
  /**签到状态 */
  signStatus?: SignStatusEnum
  /** 业务场景 0:台卡(可见)  1-活动详情  2-签到结果页  3-报名成果结果页 */
  scene?: 0 | 1 | 2 | 3
}

/**浏览记录列表查询参数 */
export interface IActivityManagerBrowseListQuery {
  // 当前页
  current?: number;
  // 每页条数
  size?: number;
  /**活动id */
  activityId: number;
  /**关键字 */
  keyWord?: string;
}

/**浏览记录详情查询记录 */
export interface IBrowseListDetailQuery {
  inviteAppUserInfoId: number | undefined;
  activityId: number;
  // 当前页
  current?: number;
  // 每页条数
  size?: number;
  /**用户id */
  appUserInfoId: number;

}


/**活动报名人员 */
export interface IActivityRegister {
  /**活动id */
  activityId: number;
  /**报名id */
  id: number;
  /**头像 */
  avatar: string;
  /**会员等级 */
  memberLevelName: string;
  /**公司名称 */
  companyName: string;
  /**公司职位 */
  companyPosition: string;
  /**人员名称 */
  personName: string;
  /** 手机号 */
  personTel: string
  /**归属组织名称 */
  orgName: string;
  /**签到状态 0 未签到 1 已签到 */
  signStatus: SignStatusEnum;
  /**审核状态 */
  approvalStatus: ApprovalStatusEnum;

  /**是否有审核权限 */
  isAuditAuth: IsAuditAuthEnum;
  /**申请时间 */
  createTime: string;

  /**申请退费时间 */
  cancelTime: string;

  /**成功报名/报名审核通过/取消/未签到 */
  passTime: string;
  /**签到时间 */
  signTime: string;
  /**审核时间,驳回 */
  verifyTime: string;

  /**代报名人姓名 */
  gmatName: string;
  /**代报名人电话 */
  gmatPhone: string;
  /**票种名称 */
  ticketName: string;
  /** 支付金额 */
  payMoney: number
}

/**报名详情表单 */
export interface IActivityRegisterFormItem {
  /**报名id */
  id: number;
  /**活动id */
  activityId: number;
  activityFormItemMap: FormItemVoMapItem,
  activityFormUserAnswerList: customFormUserAnswerList[]
}

/** 票种列表 */
export interface IActivityTicketResult {
  id: number
  ticketType: TicketTypeEnum
  /** 票种名称 */
  ticketName: string
  /** 票种描述 */
  introduction: string
  /** 原价 */
  price: number
  /** 优惠后价格 */
  discountPrice: number
  /** 库存限制(0:不限制;1:限制) */
  stockLimit: TicketStockLimitEnum
  /** 剩余库存 */
  stockNum: number
  /** 购买限制(0:不限制;1:限制) */
  buyLimit: TicketBuyLimitEnum
  /** 购票时间类型(1：活动结束前可购票;2:自定义购票时间) */
  buyTimeType: TicketBuyTimeTypeEnum
  /** 最大购买限制 */
  buyMaxNum: number
  /** 最小购买限制 */
  buyMinNum: number
  /** 购票开始时间 */
  startTime: string
  /** 购票结束时间 */
  endTime: string
  remarks: string
  ticketStatus: TicketStatusEnum
  /** 标签名：【会员职务名称】+【优惠】 */
  tagName: string
  refundTicketType: RefundTicketTypeEnum
  /** 退票时间 */
  refundTicketHour: number
  /** 票种报名是否需要审核 */
  reviewStatus: ReviewStatusEnum
  /** 当前用户是否可买此票 */
  buyTicket: boolean
  /** 无法购买原因 */
  reason?: string
  /** 无权限购买时, 接口会返回可购买身份的列表 */
  memberIdentityList?: { id: number, memberLevelName: string }[]
}

export interface ActivityCreateSuborderData {
  /** 票种ID */
  activityTicketId: number
  /** 活动ID */
  activityUnionId: number
  /** 报名场景 */
  registerType: registerType
  /** 购票数量 */
  num: number
  /** 票价 */
  submitDiscountPrice: number
  /** 报名表单数据 */
  activityFormDtoList: ({
    customFormItem: {
      answerList: { formItemId: number, content: string[] }[]
    }
  })[]
  shareKey?: string
}

export interface RegisterPayFormInfoResult {
  activityFormItemMap: Array<FormItemResult[]>
  answerList: { formItemId: number, content: string[] }[]
}

export interface RegisterDetailResult {
  activityShortDetailVo: ActivityShortDetailVo
  activityRegisterUserTicketVo: ActivityRegisterTicketUnion
}

export interface ActivityManagerDeviceActListResult {
  id: number
  orgName: string
  printerNo: string
}

export interface ActivityManagerScanVerification {
  activityId: number
  consumeNo: string
  signType: SignTypeEnum
}

export interface ActivityScanVerificationData {
  activityId: number
  // signType: SignTypeEnum
  consumeNo?: string
  phone?: string
  registerId?: number
}

export interface ActivityScanVerificationResult {
  manualSign: manualSign;
  /** 报名ID */
  id: number
}

export interface ActivitySignImgeData {
  equipmentNumber: string
  registerId: number
  signType: SignTypeEnum
  signImg?: string
}

export interface ActivityGetSignTypesResult {
  signTypes: string
  enrollSign: enrollSign
}

/**
 * @description
 * 0 报名生成中
 * 1：待审核
 * 2：报名失败（驳回，取消报名，取消报名中）
 * 3：已通过
 * 4：多条报名数据（出扫码签到）
 * @date 27/08/2024
 * @export
 * @enum {number}
 */
export enum ActivityRegisterStateEnum {
  /** 报名生成中 */
  REGISTER_GENERATE = 0,
  /** 待审核 */
  REGISTER_WAIT = 1,
  /** 报名失败（驳回，取消报名，取消报名中） */
  REGISTER_FAIL = 2,
  /** 已通过 */
  REGISTER_PASS = 3,
  /** 多条报名数据（出扫码签到） */
  REGISTER_MORE = 4
}

export interface UniongetOrderCodeResult {
  activityRegisterState: ActivityRegisterStateEnum
  activityShortDetailVo: ActivityShortDetailVo
  headquartersMemberAttacheVos: attacheVoItem[]
  orderCode: string
}

/**
 * 活动邀约排行
 */
export interface IRankList {
  activityId: number;
  /**
   * 用户名称
   */
  userName: string;
  /**
   * 头像
   */
  avatar: string;
  /**
   * 会员等级名称
   */
  memberLevelName: string;
  /**
   * 排行值
   */
  rankValue: number;
  /**
   * 排行序号
   */
  rankNum: number;
  /**
   * 当前用户排行是否在排行序号
   */
  currentUserRankNum: boolean;

  /**用户id */
  appUserInfoId?: number;
}

/**
 * 排行查询参数
 */
export interface IRankListQuery {
  activityId: number;
  rankType: RankTypeEnum
}
export interface BrowseDetailList {
  /**
   * 浏览时间
   */
  createTime: string;
  /**
   * 邀请人名称
   */
  inviteUserName: string;
  /**
   * 分享key
   */
  shareKey: number;
}
/**
 * 浏览记录列表
 */
export interface IActivityManagerBrowseList {
  /**用户id */
  appUserInfoId: number;
  /**
   * 头像
   */
  leadingAvatar: string;
  /**公司职务 */
  bbsPosition: string;

  /**
   * 公司名称
   */
  companyName: string;

  /**
   * 级别名称
   */
  levelName: string;

  /**
   * 最后时间
   */
  lastTime: string;

  /**
   * 申请类型
   */
  applyType: number;

  /**
   * 数量
   */
  num: number;
  /**报名数 */
  registerNum: number;

  /**
   * 用户名
   */
  userName: string;

  /**1 本会已报名 2 其他会报名 */
  isRegister: IsRegister;

  /**
   * 活动报名状态
   */
  approvalStatus: ApprovalStatusEnum;
}


/**
 * 退费审核参数
 */
export interface IAuditRegisterRefundApplyQuery {
  registerId: number;
  status: RefundApplyStatus;
  remarks: string;
}

/**
 * 邀请排行统计
 */
export interface DetailCount {
  activityId: number;
  activityType: ActivityTypeEnum;
  /**
   * 浏览次数
   */
  browseNum: number;
  /**浏览人数 */
  browsePeopleNum: number;
  /**报名总数 */
  registerNum: number;

  /**
   * 用户名称
   */
  userName?: string;
  /**
   * 头像
   */
  avatar?: string;
  /**
   * 公司名称
   */
  companyName?: string;
  /**
   * 会员等级名称
   */
  memberLevelName?: string;
}

/**
 * 我的邀约详情统计列表
 */
export interface InviteDetailList {
  activityId: number;
  /**
   * 用户名称
   */
  userName: string;
  /**
   * 头像
   */
  avatar: string;
  /**
   * 会员等级名称
   */
  memberLevelName: string;
  /**浏览数 */
  browseNum: number;
  /**报名人数 */
  registerNum: number;
  /**浏览时间 */
  lastTime: string;
}

/**
 * 我的邀约详情统计列表查询参数
 */
export interface ActivityInviteDetailListQuery {
  activityId: number;
  current: number;
  size: number;
  appUserInfoId?: number;
}

/**
 * 活动管理的邀约详情列表
 */
export interface ActivityManageInviteDetailList extends InviteDetailList {
  /**
 * 报名类型
 */
  registerType?: registerType;
  /**
 * 报名状态
 */
  isRegister: IsRegister;
}


/**
 * 待处理审核数
 */
export interface IReviewNum {
  /**
   * 待审核人数(报名)
   */
  waitingReviewNum: number;
  /**
   * 退票申请人数(取消报名中人数)
   */
  cancelRegisterNum: number;
}

export interface IActivityReplaceSignData {
  /** 报名id */
  id: number
  signType: SignTypeEnum
  activityId: number
  replaceSignPersonName?: string
  replaceSignPersonPhone?: string
  replaceSignCompanyName?: string
  replaceSignCompanyPosition?: string
  equipmentNumber?: string
  // 是否打印 0 不打印 1 打印
  isPrint?: 0 | 1
}

export interface ISearchRegisterListData {
  personName?: string
  companyName?: string
  activityId: number
}

export interface ISearchRegisterListResult {
  id: number
  personName: string
  companyName: string
  companyPosition: string
}

export interface IActivityCancelRecordResult {
  /** 申请时间 */
  cancelTime: string
  /** 申请人姓名 */
  cancelPersonName: string
  /** 取消原因 */
  cancelReason: string
  /** 审核人姓名 */
  verifyName: string
  /** 审核时间 */
  verifyTime: string
  /** 审核状态 */
  approvalStatus: CancelApprovalStatusEnum
  /** 审核说明 */
  remarks: string
}

/**大屏配置信息 */
export interface IBigScreenConfig {
  /** 大屏背景图 */
  backImage: string;
  /** 大屏展示模式 0 自动 1手动 */
  configType: ShowModeEnum;
  /**大屏状态 1 开启 0关闭 */
  configStatus: number;
}